Performance and power consumption are key elements for embedded devices, or embedded systems. Currently, embedded devices enter a sleep or deep sleep state in response to users' pressing of power buttons to switch off the embedded devices. In sleep or sleep state, however, data is stored on the SDRAM of the embedded device, and power is consumed in order to maintain the data stored on the SDRAM. Although this power consumption is low, it is nevertheless non-zero, and power consumption is especially evident if the SDRAM is a DDR2 SDRAM.
In addition, because of the non-zero power consumption by the SDRAM, eventually battery may run out of power. When the battery runs out of power, the content of the SDRAM will no longer be maintained, and user data may be lost.
Hibernation mode is a feature that is widely used in personal computer systems, and is supported by operating systems such as Microsoft Windows XP, Microsoft Windows Vista, and Linux. In hibernation mode, content from the RAM is saved to non-volatile storage (e.g., hard disk) before the system is powered off. Upon power on or waking from hibernation mode, content is copied back to the RAM from the non-volatile storage and the system is restored to the state it was in before hibernation was invoked, allowing programs to continue executing from the pre-hibernation state. However, there is no good support for hibernation in current embedded systems.
Current embedded systems include, but are not limited to, GPS receivers, which are frequently embedded within personal navigational systems (PNDs). With the development of radio and space technologies, several satellites based navigation systems (i.e. satellite positioning system or “SPS”) have already been built and more will be in use in the near future. SPS receivers, such as, for example, receivers using the Global Positioning System (“GPS”), also known as NAVSTAR, have become commonplace. Other examples of SPS systems include, but are not limited to, the United State (“U.S.”) Navy Navigation Satellite System (“NNSS”, also known as TRANSIT), the Russian counterpart to NAVSTAR known as the Global Navigation Satellite System (“GLONASS”), and any future Western European SPS such as the proposed “Galileo” program. As an example, the U.S. NAVSTAR GPS system is described in GPS Theory and Practice, Fifth ed., revised edition by Hofmann-Wellenhof, Lichtenegger and Collins, Springer-Verlag Wien N.Y., 2001, which is fully incorporated herein by reference.
The U.S. GPS system was built and is operated by the United States Department of Defense. The system uses twenty-four or more satellites orbiting the earth at an altitude of about 11,000 miles with a period of about twelve hours. These satellites are placed in six different orbits such that at any time a minimum of six satellites are visible at any location on the surface of the earth except in the polar region. Each satellite transmits a time and position signal referenced to an atomic clock. A typical GPS receiver locks onto this signal and extracts the data contained in it. Using signals from a sufficient number of satellites, a GPS receiver can calculate its position, velocity, altitude, and time (i.e. navigation solution).
As should be apparent, there is an important amount of GPS information that is accumulated by the receiver and that is needed to perform navigation. This information is typically lost when the internal memory of a GPS system loses power and cannot be refreshed. So when the system power is restored, this information needs to be accumulated all over again, which takes substantial time. Therefore, it would be advantageous to provide a hibernation mode to embedded systems and devices, such as GPS receivers, and further to provide a means of storing useful information such as GPS information in more permanent storage during hibernation.
Relatedly, to conserve memory during hibernation, compression is sometimes needed. There are three main aspects to evaluating data compression: compression ratio, compression/decompression throughput, and amount of memory used to perform compression/decompression. For data compression in a hibernation process, compression ratio and compression/decompression throughput are the important aspects. In a hibernation process, compressed data that is stored to non-volatile storage must be read and decompressed upon waking. The time it takes to read and decompress data depends on the amount of data that needs to be read and the decompression throughput. A higher compression ratio results in less data stored on the non-volatile storage and less time in reading. A higher decompression throughput results in less time in decompression.
Various compression techniques may be applied to compress data. The different compression techniques, however, have different compression ratios and compression/decompression throughput. Typically, there is a tradeoff between a compression technique's compression ratio and compression throughput. The higher the compression ration, the longer the amount of time to compress/decompress the data and hence the lower the throughput.
Therefore, there is a need to provide solutions for a fast wake-up time from hibernation, as well as provide a compression technique that balances the needs for both a high compression ratio and a high compression/decompression throughput to achieve fast wake-up time from hibernation.